#pragma once

#include <cstdio>
#include <cstdlib>

typedef void LinkQueue;
typedef struct _tag_LinkQueueNode TLinkQueueNode;

typedef struct _tag_LinkQueueNode {
	TLinkQueueNode* next;
	void* item;
};

typedef struct _tag_LinkQueue {
	TLinkQueueNode* front;
	TLinkQueueNode* rear;
	int length;
}TLinkQueue;

LinkQueue* LinkQueue_Create();

void LinkQueue_Destroy(LinkQueue* queue);

void LinkQueue_Clear(LinkQueue* queue);

int LinkQueue_Append(LinkQueue* queue, void* item);

void* LinkQueue_Retrieve(LinkQueue* queue);

void* LinkQueue_Header(LinkQueue* queue);

int LinkQueue_Length(LinkQueue* queue);
